home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 07511000 / var0859.dms / var0859.adf / MacSound2Amy (.txt) < prev    next >
AmigaBASIC Source Code  |  1989-08-10  |  2KB  |  85 lines

  1. REM Convert Mac sound files to Amiga Format
  2. REM David Q. King May 14, 1989
  3.  
  4. CLEAR ,80000
  5. FILES
  6. INPUT "Enter file name to convert";n$
  7. OPEN n$ FOR INPUT AS #10
  8. INPUT "Enter guestimate of samples per second for playback";freq%
  9.  
  10. ld&=LOF(10)          'length of sample
  11.  
  12. PRINT "file ";n$;" is ";ld&;" samples long."
  13.  
  14. OPEN n$+".8SVX" FOR OUTPUT AS #11
  15. PRINT "output file is open as "n$".8SVX"
  16.  
  17. e$="FORM    8SVXVHDR                 NAME    "+n$+"BODY    "
  18. REM fill in blanks in e$
  19.  
  20. formLength&=LEN(e$)-8+ld&
  21. REM insert length of whole enchilada
  22. CALL InsLong(4,formLength&)
  23. REM insert length of name text
  24. ln&=LEN(n$)
  25. CALL InsLong(INSTR(e$,"NAME")+4,ln&)
  26. REM insert length of body
  27. CALL InsLong(INSTR(INSTR(e$,"NAME")+4+ln&,e$,"BODY")+4,ld&)
  28. REM fill in fields in VHDR
  29. v&=INSTR(e$,"VHDR")+4
  30. CALL InsLong(v&,ld&)            'number of samples
  31. CALL InsLong(v&+4, 0)         'repeatHiSamples = 0 for one shot
  32. CALL InsLong(v&+8, 0)         'samplesPerHiCycle = 0 for one shot sample
  33. CALL InsShort(v&+12, freq%)    'samples per second
  34. CALL InsByte(v&+14, 1)        'ctOctave = 1 for one shot
  35. CALL InsByte(v&+15, 0)        'no data compression
  36. MID$(e$,v&+16,4)=MKS$(1)       'playback volume = 1.0 (maximum)
  37.  
  38. PRINT #11,e$;       'print header
  39.  
  40. PRINT "Converting..."
  41. REM convert mac sample range to signed byte for amiga
  42. n&=ld&
  43. WHILE n&>0
  44.   c&=1000
  45.   IF n& > c& THEN    'set max size to read
  46.     n&=n&-c&
  47.   ELSE
  48.     c&=n&
  49.     n&=0
  50.   END IF
  51.   d$=INPUT$(c&,10)     'read a chunk'
  52.   PRINT ".";
  53.   
  54.   FOR i&=1 TO c&
  55.     x%=ASC(MID$(d$,i&,1))-128
  56.     IF x% < 0 THEN x%=256+x% 
  57.     MID$(d$,i&,1)=CHR$(x%)
  58.   NEXT i&
  59.   
  60.   PRINT#11,d$;           'print a chunk
  61.  
  62. WEND
  63.  
  64. CLOSE(11)
  65. PRINT "Done!"
  66. END
  67.  
  68. REM GOSUB ShowD
  69. END
  70.  
  71. SUB InsLong(p&, x&) STATIC
  72.   MID$(e$,p&,4)=MKL$(x&)
  73. END SUB
  74.  
  75. SUB InsShort(p&, x%) STATIC
  76.    MID$(e$,p&,2)=MKI$(x%)
  77. END SUB
  78.  
  79. SUB InsByte(p&, x%)  STATIC
  80.    MID$(e$,p&,1)=CHR$(x%)
  81. END SUB
  82.  
  83.  
  84.  
  85.